package once

import "sync"

type singleton struct {
}

var instance *singleton
var once sync.Once

// 这是一个单例， 通过once来实现，只是初始化一次
/**
在多数情况下，sync.Once 被用于控制变量的初始化，这个变量的读写通常遵循单例模式，满足这三个条件：
当且仅当第一次读某个变量时，进行初始化（写操作）
变量被初始化过程中，所有读都被阻塞（读操作；当变量初始化完成后，读操作继续进行
变量仅初始化一次，初始化完成后驻留在内存里
 */
func GetInstance() *singleton {
	once.Do(func() {
		instance = &singleton{}
	})
	return instance
}
